package model

import (
	"go.mongodb.org/mongo-driver/bson/primitive"
)

// 视图
type Visual struct {
	ID            primitive.ObjectID `json:"id" bson:"ID"`                       // 主键
	IdObjID       primitive.ObjectID `json:"-" bson:"-"`                         // 弃用
	Title         string             `json:"title" bson:"Title"`                 // 大屏标题
	BackgroundUrl string             `json:"backgroundUrl" bson:"BackgroundUrl"` // 大屏背景
	Category      *int32             `json:"category" bson:"Category"`           // 大屏类型，这里不知道blade为什么不用分类ID
	Password      string             `json:"password" bson:"password"`           // 发布密码
	//CreateTime    time.Time // 创建时间
	//UpdateTime    time.Time // 修改时间
	Status       *int32             `json:"status" bson:"Status"`       // 状态
	Username     string             `json:"username" bson:"Username"`   // 所属用户
	ProjectID    string             `json:"projectID" bson:"ProjectID"` //Project ID
	ProjectObjID primitive.ObjectID `json:"-" bson:"-"`
	TenantModel  `json:",inline" bson:",inline"`
}

func (v *Visual) SetId(id primitive.ObjectID) {
	v.ID = id
}

func (v *Visual) GetId() string {
	return v.ID.Hex()
}

// 配置
type Config struct {
	ID          primitive.ObjectID `json:"id" bson:"ID"` // 主键
	IdObjID     primitive.ObjectID `json:"-" bson:"-"`
	VisualId    primitive.ObjectID `json:"visualId" bson:"VisualId"`   // 可视化表主键
	Detail      string             `json:"detail" bson:"Detail"`       // 配置 json
	Component   string             `json:"component" bson:"Component"` // 组件 json
	SceneUrl    string             `json:"sceneUrl" bson:"SceneUrl"`   // 场景地址
	TenantModel `json:",inline" bson:",inline"`
}

func (c *Config) SetId(id primitive.ObjectID) {
	c.ID = id
}
func (c *Config) GetId() string {
	return c.ID.Hex()
}

type Model struct {
	Visual     Visual `json:"visual"`
	Config     Config `json:"config"`
	VisualType string `json:"visualType"`

	IsPortal bool `json:"isPortal,omitempty" bson:"isPortal,omitempty"` // 是否是从portal创建
}

// 选择器用
type VisualCascade struct {
	Value    string          `json:"value"`
	Label    string          `json:"label"`
	Children []VisualCascade `json:"children,omitempty"`
}

type CgsFile struct {
	Id         primitive.ObjectID `json:"id" bson:"ID"`
	FileName   string             `json:"fileName" bson:"FileName"`
	FileSize   int64              `json:"fileSize" bson:"FileSize"`
	FileType   string             `json:"fileType" bson:"FileType"`
	Name       string             `json:"name" bson:"Name"`
	OriginName string             `json:"originName" bson:"OriginName"`
	SavePath   string             `json:"savePath" bson:"SavePath"`
	Thumbnail  string             `json:"thumbnail" bson:"Thumbnail"`
	Url        string             `json:"url" bson:"Url"`

	TenantModel `json:",inline" bson:",inline"`
}

func (c *CgsFile) SetId(id primitive.ObjectID) {
	c.Id = id
}

func (c *CgsFile) GetId() string {
	return c.Id.Hex()
}

type PutFileResult struct {
	Link         string `json:"link" bson:"-"`
	UnZipLink    string `json:"unZipLink"`
	Domain       string `json:"domain" bson:"-"`
	Name         string `json:"name" bson:"-"`
	OriginalName string `json:"originalName" bson:"-"`
}
